package com.vhall.component.controller.gift;

import com.vhall.component.entity.gift.dto.GiftListDataDTO;
import com.vhall.component.entity.gift.dto.GiftPageDTO;
import com.vhall.component.entity.gift.dto.RoomGiftDTO;
import com.vhall.component.entity.gift.vo.*;
import com.vhall.component.entity.page.vo.PageVO;
import com.vhall.component.plugin.common.annotation.TokenAuth;
import com.vhall.component.plugin.common.annotation.VssTokenAuth;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;

import java.util.Map;

/**
 * 表情管理应用端
 *
 * @author xianglei
 * @date 2021/7/5 11:04
 */
@FeignClient(value = "GiftFacade", path = "/v4/gift")
public interface GiftFacade {

    /**
     * 创建表情
     *
     * @param reqVo 参数
     * @return 创建表情信息
     */
    @PostMapping(value = "/create")
    @VssTokenAuth
    GiftRspVo create(@Validated GiftAddReqVo reqVo);

    /**
     * 删除表情
     *
     * @param reqVo 参数
     * @return 删除数量
     */
    @PostMapping(value = "/delete")
    @VssTokenAuth
    Integer delete(@Validated GiftDelReqVo reqVo);

    /**
     * 编辑表情
     *
     * @param reqVO 参数
     * @return GiftRspVo
     */
    @PostMapping(value = "/update")
    @VssTokenAuth
    GiftRspVo update(@Validated GiftUpdateReqVo reqVO);

    /**
     * 表情列表
     *
     * @param reqVo 参数
     * @return 表情列表
     */
    @PostMapping(value = "/list")
    @VssTokenAuth
    Map<String, Object> list(@Validated ListReqVo reqVo);


    /**
     * 保存表情关联关系
     *
     * @param reqVo 参数
     * @return MapSaveRspVO
     */
    @PostMapping(value = "/mapping-save")
    @VssTokenAuth
    MapSaveRspVO mappingSave(@Validated MapSaveReqVo reqVo);

    /**
     * 更新支付状态
     *
     * @param reqVo 参数
     * @return PayStatusSetRspVO
     */
    @PostMapping(value = "/set-pay-status")
    @VssTokenAuth
    PayStatusSetRspVO setPayStatus(@Validated SetPayStatusReqVo reqVo);

    /**
     * 送表情
     *
     * @param reqVo 参数
     * @return GiftSendRspVo
     */
    @PostMapping(value = "/send")
    GiftSendRspVo send(@Validated GiftSendReqVo reqVo);


    /**
     * 送表情新方法
     *
     * @param reqVo 参数
     * @return 送礼返回信息
     */
    @PostMapping(value = "/new-send")
    @TokenAuth
    Map<String, String> newSend(@Validated GiftNewSendReqVo reqVo);

    /**
     * 表情使用列表
     *
     * @param reqVo 参数
     * @return 返回
     */
    @PostMapping(value = "/use-list")
    @VssTokenAuth
    Map<String, Object> useList(@Validated UseListReqVo reqVo);

    /**
     * 获取关联房间的表情列表
     *
     * @param vo 参数
     * @return 关联房间的表情列表
     */
    @PostMapping("/room-gift")
    @VssTokenAuth
    GiftPageDTO<RoomGiftDTO> roomGiftList(@Validated RoomGiftListVO vo);

    /**
     * 观看端表情列表-国信
     */
    @PostMapping(value = "/watch_gift_list")
    PageVO<GiftListDataDTO> watchGiftList(@Validated WatchGiftListReqVo reqVo);
}
